<?php

//函数
function printHi($arg1)  //调用时，参数个数必须一致
{
    print("hellow!");
}
function memeryMath(&$arg1){//按地址传参
     ++$arg1;
}
printHi(2);
echo "</br>";
$arg1=10;
memeryMath($arg1);
echo $arg1;

//函数默认值
function defaultArg($arg1,$arg2=10)
{
  return $arg1+$arg2;
}
echo "</br>";
echo defaultArg(30);

print_r($_SERVER);//打印数组

//递归
function jiecheng($arg1){
    if($arg1>0){
       
        return($arg1*jiecheng($arg1-1));
    }
    else{return 1;}
}

//echo jiecheng(5);

//变量函数
$arg3="jiecheng";  //给一个变量赋值一个函数名，可以直接执行
echo "</br>";
//echo $arg3(10);

//变量作用域   跟c# 大不相同  


//局部变量
$arg4=10;//虽然在主程序定义，但是却不能再函数中被调用
function func_area()
{
    echo "</br>the test func_area:";
    //echo $arg4;  错误的，无法调用此函数外的变量
    $arg5=22;
    echo $arg5; 
}
func_area();
echo "</br>";

//echo $arg5;//错误， 函数内的变量 无法在外面被调用

//全局变量  无论在哪定义都可被调用，但是变量需要被  冠名 global
$arg6=2;
function func_all_area(){
    global $arg6;
    global $arg7;
    $arg7=12;
    echo $arg6;
}

func_all_area();
echo "</br>";
echo $arg7;

//作用域特例， 局部变量可以使用  GLOBALS['变量名'] 来调用  
echo "</br>";
function func_diff_area(){
    echo "in func use :".$GLOBALS['arg4'];
}
func_diff_area();

//静态变量
function staticvariable(){
    static $arg8=1;
    return ++$arg8;
}
echo "</br> the firest:";
echo staticvariable();
echo "</br> the second:";
echo staticvariable();

//包含文件
require "MATHTEST.php";  //require 只是引用文件
echo "</br>";
echo "10+22=".math_add(10,22);

$arg9= include "INCLUDE.php";//include会执行引用，而且可接收返回值
echo "</br>print arg9:";
echo $arg9;

//include include_once   require require_once
//include_once 和 require_once 都只会加载一次，多次加载无效 ，include require可以多次加载


//数学运算
//四舍五入round
echo "</br>print round:";
echo round(10/3,5);

//进一位 取整
echo "</br>print ceil:";
echo ceil(2.1);

//进制转换   十进制=>二进制
echo "</br>print 10=>2 decbin:";
echo decbin(98);

//十进制=》十六进制
echo "</br>print 10=>16 dechex:";
echo dechex(98);

//十进制=》八进制
echo "</br>print 10=>8 decoct:";
echo decoct(98);

//日期
echo "</br>print date format:";
echo date("Y-m-d G:i:s");

echo "</br>print getdate:";
print_r(getdate(60*60*24*365));

echo "</br>print gmdate:";
echo gmdate("Y-m-d G:i:s");

//数组 $arry[key]=[value]
//php中的数组更像是键值对集合,如果key不写的话，默认是  按最大下标+1
$arg_array[]="test";
echo "</br>print array:";
echo $arg_array[0];

$arg_array["z"]="zhang";
echo "</br>print array['z']:";
echo $arg_array['z'];

$arg_array[]="test2";
echo "</br>print array[1]:";
echo $arg_array['z'];
echo $arg_array[1];
//----使用函数创建（多个）
//创建方式一
$arg_array2=array("title","body","head");
for($i=0;$i<count($arg_array2);$i++){
    echo "</br>".$arg_array2[$i];
}
//创建方式二
$arg_array3=array(1=>"title2",2=>"body2",3=>"head2");
for($i=1;$i<=count($arg_array3);$i++){
    echo "</br>".$arg_array3[$i];
}

//多维数组
$arg_array4[0][0]="0-0";
$arg_array4[0][1]="0-1";
$arg_array4[0][2]="0-2";
$arg_array4[0][3]="0-3";
$arg_array4[1][0]="1-0";
$arg_array4[1][1]="1-1";
$arg_array4[1][2]="1-2";
$arg_array4[1][3]="1-3";
//print_r($arg_array4);
for($i=0;$i<4;$i++){
    echo "</br>".$arg_array4[0][$i];
}
//数组输出的两种方式  print_r  var_dump
echo "</br> print_r :";
print_r($arg_array3);
echo "</br> var_dump :";
var_dump($arg_array3);

//foreach循环只能用于数组 分两种，直接遍历  和键值对遍历
//直接遍历
foreach($arg_array3 as $value1){
    echo "</br>".$value1;
}

//键值对遍历
foreach($arg_array2 as $key=>$value){
    echo "</br>".$key."=>".$value;
}

//each(array) 遍历   相当于 从起始下标开始  遍历输出（单次）0为键  1为值 
echo "</br>each:";
$arg_array5=array("10","20","30");
$arg_each=each($arg_array5);
echo "</br>arg_each[0] is key:".$arg_each[0];
echo "</br>arg_each[1] is value:".$arg_each[1];

//list(arg1,arg2,arg3...)=1,2,3..函数 ，将右边的值依次赋值给左边，配合each使用
list($key1,$value1)=each($arg_array5);
echo "</br>key is $key1:";
echo "</br>value is $value1:";

//key() 和current()函数
echo "</br>key() is :".key($arg_array5);
echo "</br>current() is :".current($arg_array5);

//array_search('value',$array)函数， 判断$array数组内是否有value，如果有返回  key值，如果没有 返回false
$arg_arraysearch=array_search('30',$arg_array5);
echo "</br>print array_search find key:".$arg_arraysearch;
$arg_arraysearch2=array_search('40',$arg_array5);
echo "</br>print array_search find key(no find):".settype($arg_arraysearch2,"string");//1为true

//数组的 合并 $c=$a+$b //会根据键 来追加，如果  两个数组内存在 相同键，则取  加号前面的那个
$arg_array6=array('a'=>"1-a",'b'=>"1-b",'c'=>"1-c");
$arg_array7=array('d'=>"2-a",'b'=>"2-b",'e'=>"2-c");
$arg_array9=array('a'=>"1-a",'c'=>"1-c",'b'=>"1-b");
echo "</br> array6 is :";
print_r($arg_array6);
echo "</br> array7 is :";
print_r($arg_array7);

$arg_array8=$arg_array7+$arg_array6;
echo "</br> array6+array7 is :";
print_r($arg_array8);

//数组的比较 $a==$b   和 $a===$b , ===(三等号) 比较  键值对 和顺序呢， ==(双等号) 比较键值对
echo "</br> a==b result is:";
$boolresult1= $arg_array6==$arg_array9;
echo $boolresult1?"true":"false";

echo "</br> a===b result is:";
$boolresult2= $arg_array6===$arg_array9;
echo $boolresult2?"true":"false";

//数组排序， 有“键排序”  和 "值排序"
//键排序：ksort() 键 正序排序 
//       krsort()键 倒序排序
//       uksort()键 自定义排序
ksort($arg_array8);
echo "</br>ksort  order by key==>";
print_r($arg_array8);

krsort($arg_array8);
echo "</br>krsort  order by key desc==>";
print_r($arg_array8);
//值排序：asort  值  正序排序
//      arsort  值  倒序排序
//      uasort  值  自定义排序
asort($arg_array9);
echo "</br>asort order by value==>";
print_r($arg_array9);
arsort($arg_array9);
echo "</br>arsort order by value desc==>";
print_r($arg_array9);
//删除原有键 ，赋予新键  并排序
// sort 正序
// rsort 倒序
//usort  自定义
sort($arg_array8);
echo "</br> oder by sort ==>";
print_r($arg_array8);
rsort($arg_array8);
echo "</br> oder by rsort ==>";
print_r($arg_array8);
?>